package com.shujia.core

import com.shujia.core.Demo10Join.Student
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.rdd.RDD

object Demo16Action {
  def main(args: Array[String]): Unit = {
    // 常见的Action算子

    // foreach take collect count reduce save保存

    val conf: SparkConf = new SparkConf()
    conf.setAppName("Demo16Action")
    conf.setMaster("local")

    val sc: SparkContext = new SparkContext(conf)

    // 读取学生数据及分数数据 并将每一行数据转换成样例类对象
    val stuRDD: RDD[Student] = sc
      .textFile("Spark/data/students.txt")
      .map(line => {
        val splits: Array[String] = line.split(",")
        val id: String = splits(0)
        val name: String = splits(1)
        val age: Int = splits(2).toInt
        val gender: String = splits(3)
        val clazz: String = splits(4)
        Student(id, name, age, gender, clazz)
      })

    // foreach 处理每一条数据 没有返回值
    //    stuRDD.foreach(println)

    // take
    stuRDD
      .take(10) // 从RDD中取前N条数据 会返回一个Array数组
      .foreach(println) // 这里的foreach是Array的方法

    // collect
    stuRDD
      .collect() // 将RDD中所有的数据变成一个Array 如果数据量过大会有问题
      .foreach(println) // 这里的foreach是Array的方法

    // count获取RDD中数据的条数
    val cnt: Long = stuRDD
      .count()
    println(cnt)

    // reduce 全局聚合 相当于把所有的数据当作一个组
    // select sum(age) from student group by 1
    val sumAge: Int = stuRDD
      .map(stu => stu.age)
      .reduce(_ + _)
    println(sumAge)


  }

}
